package beans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
//import javax.persistence.MappedSuperclass;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@Table(name="Productos")
public class Producto implements Serializable
{
	
	private static final long serialVersionUID = -6944563487776690439L;

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO) 
    private int idProducto;
	
	@Column (name="Nombre", nullable=false)
    private String nombre;
	
	@Column (name="PrecioCompra", nullable=false)
    private float precioCompra;
	
	@Column (name="PrecioUso", nullable=false)
    private float precioUso;
	
	@OneToMany (cascade=CascadeType.ALL, fetch=FetchType.EAGER)
    @JoinColumn(name="idProducto")
    private List<Proveedor> proveedores;
	
	@Column (name="Caducidad", nullable=false)
    private String caducidad;
	
	@Column (name="UnidadCompra", nullable=false)
    private String unidadCompra;
	
	@Column (name="UnidadUso", nullable=false)
    private String unidadUso;

	
	public Producto() {
		proveedores = new ArrayList<Proveedor>();
		
		
	}

	

	public Producto(String nombre, float precioCompra, float precioUso,
			String caducidad, String unidadCompra, String unidadUso)
	{
		this.nombre = nombre;
		this.precioCompra = precioCompra;
		this.precioUso = precioUso;
		this.caducidad = caducidad;
		this.unidadCompra = unidadCompra;
		this.unidadUso = unidadUso;
	}



	public int getIdProducto() {
		return idProducto;
	}


	public void setIdProducto(int idProducto) {
		this.idProducto = idProducto;
	}


	public String getNombre() {
		return nombre;
	}


	public void setNombre(String nombre) {
		this.nombre = nombre;
	}


	public float getPrecioCompra() {
		return precioCompra;
	}


	public void setPrecioCompra(float precioCompra) {
		this.precioCompra = precioCompra;
	}


	public float getPrecioUso() {
		return precioUso;
	}


	public void setPrecioUso(float precioUso) {
		this.precioUso = precioUso;
	}


	public List<Proveedor> getProveedores() {
		return proveedores;
	}


	public void setProveedores(List<Proveedor> proveedores) {
		this.proveedores = proveedores;
	}


	public String getCaducidad() {
		return caducidad;
	}


	public void setCaducidad(String caducidad) {
		this.caducidad = caducidad;
	}


	public String getUnidadCompra() {
		return unidadCompra;
	}


	public void setUnidadCompra(String unidadCompra) {
		this.unidadCompra = unidadCompra;
	}


	public String getUnidadUso() {
		return unidadUso;
	}


	public void setUnidadUso(String unidadUso) {
		this.unidadUso = unidadUso;
	}



	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((caducidad == null) ? 0 : caducidad.hashCode());
		result = prime * result + idProducto;
		result = prime * result + ((nombre == null) ? 0 : nombre.hashCode());
		result = prime * result + Float.floatToIntBits(precioCompra);
		result = prime * result + Float.floatToIntBits(precioUso);
		result = prime * result
				+ ((proveedores == null) ? 0 : proveedores.hashCode());
		result = prime * result
				+ ((unidadCompra == null) ? 0 : unidadCompra.hashCode());
		result = prime * result
				+ ((unidadUso == null) ? 0 : unidadUso.hashCode());
		return result;
	}



	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Producto other = (Producto) obj;
		if (caducidad == null) {
			if (other.caducidad != null)
				return false;
		} else if (!caducidad.equals(other.caducidad))
			return false;
		if (idProducto != other.idProducto)
			return false;
		if (nombre == null) {
			if (other.nombre != null)
				return false;
		} else if (!nombre.equals(other.nombre))
			return false;
		if (Float.floatToIntBits(precioCompra) != Float
				.floatToIntBits(other.precioCompra))
			return false;
		if (Float.floatToIntBits(precioUso) != Float
				.floatToIntBits(other.precioUso))
			return false;
		if (proveedores == null) {
			if (other.proveedores != null)
				return false;
		} else if (!proveedores.equals(other.proveedores))
			return false;
		if (unidadCompra == null) {
			if (other.unidadCompra != null)
				return false;
		} else if (!unidadCompra.equals(other.unidadCompra))
			return false;
		if (unidadUso == null) {
			if (other.unidadUso != null)
				return false;
		} else if (!unidadUso.equals(other.unidadUso))
			return false;
		return true;
	}
	
	public String toString()
	{
		return ""+nombre;
	}
	
	
	
}
